package com.wn.advice;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.wn.bean.SysLog;
import com.wn.service.ISysLogService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Date;

/**
 * @author yellow Docter
 * @date 2024-07-04
 * @desc 蜗牛创想：www.woniuxy.com
 */
@Component
@Aspect
public class LogAspect {

//    @Autowired
//    private ISysLogService sysLogService;
//
//    //切点  (切谁)
//    @Pointcut("execution(* com.wn.service.impl.*.*(..))")
//    public void pt(){}
//
//    //通知
//    @Around("pt()")
//    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
//        Object object = joinPoint.proceed();
//
//        SysLog sysLog = new SysLog(); //这个bean是封装日志
//
//        //servletRequest 对象封装的数据
//        //RequestContextHolder 是springmvc容器的大管家 封装了web的所有的数据 (请求、相应等数据)
//        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//        //封装了请求的基本的 数据 (http中的数据)
//        HttpServletRequest request = requestAttributes.getRequest();
//        //请求的方法
//        String reqType = request.getMethod();
//        String reqUrl = request.getRequestURL().toString();
//        sysLog.setReqType(reqType);
//        sysLog.setReqUrl(reqUrl);
//
//        //当前的类型 目标对象
//        String fullClass = joinPoint.getTarget().getClass().getName();
//        sysLog.setFullClass(fullClass);
//
//        //通过连接点拿到 方法签名对象
//        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
//        //拿到方法对象
//        Method method = methodSignature.getMethod();
//        String methodName = method.getName();
//        //把数组参数转成 字符串
//        String reqParams = Arrays.toString(method.getParameters());
//        //当前的方法的 封装的数据
//        sysLog.setMethod(methodName);
//        sysLog.setReqParams(reqParams);
//        //这个是 web下面的的 json的依赖下面的一个类 处理json数据
//        String respData = new ObjectMapper().writeValueAsString(object);
//        sysLog.setRespData(respData);
//
//        sysLog.setOptTime(new Date());
//
//        sysLogService.saveSysLog(sysLog);
//
//        return object;
//    }


}
